import pandas as pd
from matplotlib import pyplot as plt

# 问题：按日期统计的数据，缺失了某天，导致数据不全该怎么补充日期？
# 可以用两种方法实现：
# 1、DataFrame.reindex，调整dataframe的索引以适应新的索引
# 2、DataFrame.resample，可以对时间序列重采样，支持补充缺失值
def index_lost():
    df = pd.DataFrame({
        "pdate": ["2019-12-01", "2019-12-02", "2019-12-04", "2019-12-05"],
        "pv": [100, 200, 400, 500],
        "uv": [10, 20, 40, 50],
    })
    df.set_index('pdate').plot
    print(df.head())
    plt.show()
    # 方法1：使用pandas.reindex方法
    # 1、将df的索引变成日期索引
    df_date = df.set_index("pdate")
    print(df_date.index)
    # 将df的索引设置为日期索引
    df_date = df_date.set_index(pd.to_datetime(df_date.index))
    print(df_date)
    # 2、使用pandas.reindex填充缺失的索引
    # 生成完整的日期序列
    pdates = pd.date_range(start="2019-12-01",end="2019-12-05")
    print(pdates)
    print("-------------------------------------------")
    # 填补缺省的index  reindex
    df_date_new = df_date.reindex(pdates,fill_value=0)
    print(df_date_new)
    df_date_new.plot()
    plt.show()

# 方法2：使用pandas.resample方法¶
# 1、先将索引变成日期索引
def index_lost2():
    df = pd.DataFrame({
        "pdate": ["2019-12-01", "2019-12-02", "2019-12-04", "2019-12-05"],
        "pv": [100, 200, 400, 500],
        "uv": [10, 20, 40, 50],
    })
    # print(df) 将 日期 设置 index
    df_new = df.set_index(pd.to_datetime(df['pdate'])).drop('pdate',axis=1)
    print(df_new.head(10))
    print(df_new.index)
    # 2、使用dataframe的resample的方法按照天重采样
    # 由于采样会让区间变成一个值，所以需要指定mean等采样值的设定方法
    df_new_2 = df_new.resample("D").mean().fillna(0)
    print(df_new_2)
    # resample的使用方式 2D 表示 2天  M 代表每月最后一天
    df_new_3 = df_new.resample("2D").mean()
    print(df_new_3)








if __name__ == '__main__':
    # index_lost()
    index_lost2()